function WebGLInfo(gl) {

  const memory = {
    geometries: 0,
    textures: 0
  };

  const render = {
    frame: 0,
    calls: 0,
    triangles: 0,
    points: 0,
    lines: 0
  };

  function update(count, mode, instanceCount) {

    render.calls++;

    switch (mode) {

      case gl.TRIANGLES:
        render.triangles += instanceCount * (count / 3);
        break;

      case gl.LINES:
        render.lines += instanceCount * (count / 2);
        break;

      case gl.LINE_STRIP:
        render.lines += instanceCount * (count - 1);
        break;

      case gl.LINE_LOOP:
        render.lines += instanceCount * count;
        break;

      case gl.POINTS:
        render.points += instanceCount * count;
        break;

      default:
        console.error('THREE.WebGLInfo: Unknown draw mode:', mode);
        break;

    }

  }

  function reset() {

    render.frame++;
    render.calls = 0;
    render.triangles = 0;
    render.points = 0;
    render.lines = 0;

  }

  return {
    memory: memory,
    render: render,
    programs: null,
    autoReset: true,
    reset: reset,
    update: update
  };

}


export {WebGLInfo};
